home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_10_01 / cmenu.exe / CCMENU.H < prev    next >
Text File  |  1991-11-11  |  6KB  |  267 lines

  1. /************************************************************
  2.  *    Program: CMENU Menu Compiler
  3.  *  Module: ccmenu.h -- Compiler Module header file
  4.  *    Written by: Leor Zolman, 11/90
  5.  ************************************************************/
  6.  
  7. /********************* Misc. constants **********************/
  8.  
  9. #define    TRUE    1
  10. #define FALSE    0
  11. #define    OK        0
  12.  
  13. #define    UNDEF_FWD (-1)    /* undefined forward reference flag */
  14.  
  15.  
  16. /********************** extern control **********************/
  17.  
  18. #ifndef MASTER
  19. #    define Extern extern        /* external declarations    */
  20. #else
  21. #    define Extern                /* one-time definitions        */
  22. #endif
  23.  
  24.  
  25. /********************* Type Definitions *********************/
  26.  
  27. typedef struct {
  28.     char Name[MAX_NAME];
  29.     ITEM Item;
  30. } IINFO;
  31.  
  32. typedef struct {
  33.     char Name[MAX_NAME];
  34.     BOOL Processed;
  35.     MENU Menu;
  36.     IINFO *Items[MAX_ITEMS];
  37. } MINFO;
  38.  
  39. /*********************** Token codes: ************************/
  40.  
  41. #if __STDC__
  42.  
  43. enum {
  44.     T_NULL,                                /* special code    */
  45.     T_MENU, T_TITLE, T_PATH,
  46.     T_SPACING, T_COLUMNS, T_ENDMENU,
  47.     T_ITEM, T_TEXT,
  48.     T_ALIGN, T_LEFT, T_CENTER, T_RIGHT,
  49.     T_NEXTITEM, T_FIRST, T_LAST, T_NEXT,
  50.     T_EMENU, T_LMENU, T_ACTION,
  51.     T_HELP,
  52.     T_PROMPT, T_PAUSE,                    /* synonyms */
  53.     T_NOPROMPT, T_NOPAUSE,                /* synonyms */
  54.     T_PRECLEAR, T_NOPRECLEAR, T_POSTCLEAR, T_NOPOSTCLEAR,
  55.     T_EXIT,
  56.     T_ESCAPE, T_NOESCAPE,
  57.     T_STRING, T_VALUE, T_COLON, T_EOF    /* special tokens */
  58. };
  59.  
  60. #else   /* __STDC__ */
  61.  
  62. #define T_NULL        0                /* special code    */
  63. #define T_MENU        1
  64. #define T_TITLE        2
  65. #define T_PATH        3
  66. #define T_SPACING    4
  67. #define T_COLUMNS    5
  68. #define T_ENDMENU    6
  69. #define T_ITEM        7
  70. #define T_TEXT        8
  71. #define T_ALIGN        9
  72. #define T_LEFT        10
  73. #define T_CENTER    11
  74. #define T_RIGHT        12
  75. #define T_NEXTITEM    13
  76. #define T_FIRST        14
  77. #define T_LAST        15
  78. #define T_NEXT        16
  79. #define T_EMENU        17
  80. #define T_LMENU        18
  81. #define T_ACTION    19
  82. #define T_HELP        20
  83. #define T_PROMPT    21                /* synonyms */
  84. #define T_PAUSE        22
  85. #define T_NOPROMPT    23                /* synonyms */
  86. #define T_NOPAUSE    24
  87. #define T_PRECLEAR    25
  88. #define T_NOPRECLEAR    26
  89. #define T_POSTCLEAR        27
  90. #define T_NOPOSTCLEAR    28
  91. #define T_EXIT        29
  92. #define T_ESCAPE    30
  93. #define T_NOESCAPE    31
  94. #define T_STRING    32            /* special tokens */
  95. #define T_VALUE        33
  96. #define T_COLON        34
  97. #define T_EOF        35
  98.  
  99. #endif  /* __STDC__ */
  100.  
  101. /********************* Prototypes: **************************/
  102.  
  103. #if __STDC__ || XENIX        /* ANSI Prototypes: */
  104.  
  105. int write_file(void);
  106. int dofile(char *);
  107.  
  108. void itemcheck(void);
  109. int gettok();
  110.  
  111. int error(char *, ...);
  112. int fatalerr(char *, ...);
  113.  
  114. MINFO create_menu(char *);
  115. IINFO *create_item(char *);
  116. MINFO *find_menu(char *);
  117. IINFO *find_item(char *);
  118.  
  119. int do_menu(void);
  120. int do_title(void);
  121. int do_path(void);
  122. int do_spacing(void);
  123. int do_columns(void);
  124. int do_item(void);
  125. int do_endmenu(void);
  126. int do_align(void);
  127. int do_text(void);
  128. int do_text2(void);
  129. int do_nextitem(void);
  130. int do_action(void);
  131. int do_help(void);
  132. int do_prompt(void);
  133. int do_clear(void);
  134. int do_err(void);
  135. int do_escape();
  136. int do_opts(void);
  137.  
  138. #else            /* K&R Prototypes: */
  139.  
  140. int write_file();
  141. int dofile();
  142.  
  143. Void itemcheck();
  144. int gettok();
  145.  
  146. int error();
  147. int fatalerr();
  148.  
  149. MINFO create_menu();
  150. IINFO *create_item();
  151. MINFO *find_menu();
  152. IINFO *find_item();
  153.  
  154. int do_menu();
  155. int do_title();
  156. int do_path();
  157. int do_spacing();
  158. int do_columns();
  159. int do_item();
  160. int do_endmenu();
  161. int do_align();
  162. int do_text();
  163. int do_text2();
  164. int do_nextitem();
  165. int do_action();
  166. int do_help();
  167. int do_prompt();
  168. int do_clear();
  169. int do_err();
  170. int do_escape();
  171. int do_opts();
  172.  
  173. #endif
  174.  
  175. #ifdef NEEDSTR
  176. char *strstr();
  177. #endif
  178.  
  179.  
  180. /************ Keyword / function dispatch table *************/
  181.  
  182. struct keywd {
  183.     char *keyword;
  184.     int (*t_func)();
  185. };
  186.  
  187. extern struct keywd keywords[];
  188.  
  189. #ifdef MASTER
  190. struct keywd keywords[] = {
  191.     "(null)", do_err,            /* for db only    */
  192.     "menu", do_menu,
  193.     "title", do_title,
  194.     "path", do_path,
  195.     "spacing", do_spacing,
  196.     "columns", do_columns,
  197.     "endmenu", do_endmenu,
  198.     "item", do_item,
  199.     "text", do_text,
  200.     "align", do_align,
  201.         "left", do_err,
  202.         "center", do_err,
  203.         "right", do_err,
  204.     "nextitem", do_nextitem,
  205.         "first",  do_err,
  206.         "last", do_err,
  207.         "next", do_err,
  208.     "emenu", do_action,
  209.     "lmenu", do_action,
  210.     "action", do_action,
  211.     "help", do_help,
  212.     "prompt", do_opts,
  213.     "pause", do_opts,
  214.     "noprompt", do_opts,
  215.     "nopause", do_opts,
  216.     "preclear", do_opts,
  217.     "nopreclear", do_opts,
  218.     "postclear", do_opts,
  219.     "nopostclear", do_opts,
  220.     "exit", do_action,
  221.     "escape", do_escape,
  222.     "noescape", do_escape,
  223.     "(!string)", do_err,        /* for db only    */
  224.     "(!value)", do_err,        /* for db only    */
  225.     "(!colon)", do_err,        /* for db only    */
  226.     "(!EOF)", do_err                /* for db only    */
  227. };
  228. #endif
  229.  
  230. #define    N_KEYWORDS    (sizeof keywords / sizeof (struct keywd))
  231.  
  232.  
  233. /*************** Other Data structures *********************/
  234.  
  235. Extern    MINFO MInfo[MAX_MENUS], *MIp;
  236. Extern    IINFO *IIp;
  237.  
  238. Extern    MENU *Mp, *CMp;        /* General, Current Menu Pointers    */
  239. Extern    ITEM *Ip, *CIp;        /* General, Current Item Pointers    */
  240.  
  241. Extern    struct {            /* Item Forward Reference Table        */
  242.     char iname[MAX_NAME];    /* Item name                        */
  243.     int *refp;                /* Pointer to reference location    */
  244.     int lineno;                /* source line number of reference    */
  245. } fwd_refs[MAX_ITEMS];
  246.  
  247. Extern    int n_refs;                    /* Number of forward references    */
  248.  
  249. /************** Miscellaneous data items ********************/
  250.  
  251. Extern    FILE    *fp;
  252. Extern    int        token, token2;            /* token codes            */
  253. Extern    char    tparam[MAX_CMD];        /* text parameter        */
  254. Extern    int        vparam;                    /* value parameter        */
  255. Extern    int        lineno;                    /* current line number    */
  256. Extern    int        n_menus,
  257.                 n_items;
  258. Extern    BOOL    in_menu,
  259.                 in_item;
  260. Extern    BOOL    err_flag,
  261.                 fatal;
  262. Extern    int        item_num,
  263.                 menu_num;
  264.     
  265. Extern    char    src_name[MAX_PATH];
  266. Extern    char    obj_name[MAX_PATH];
  267.